package com.javaee.ch10.web;

import com.javaee.ch10.common.response.ResultVo;
import com.javaee.ch10.dao.ReaderDao;
import com.javaee.ch10.entity.Reader;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@Validated
@RestController
@RequestMapping("/api/reader")
public class ReaderController {

    @Autowired
    ReaderDao readerDao;

    /**
     * 获取指定ID的读者信息。
     *
     * @param id 读者ID
     * @return 包含读者对象的ResultVo
     */
    @GetMapping("/{id}")
    public ResultVo<Reader> get(@PathVariable long id) {
        Reader reader = readerDao.getEntityById(id);
        return ResultVo.ok(reader);
    }

    /**
     * 添加新读者。
     *
     * @param reader 新读者对象
     * @return 操作结果的ResultVo
     */
    @PostMapping("/")
    public ResultVo add(@Valid @RequestBody Reader reader) {
        readerDao.addEntity(reader);
        return ResultVo.ok();
    }

    /**
     * 更新读者信息。
     *
     * @param reader 要更新的读者对象
     * @return 操作结果的ResultVo
     */
    @PutMapping("/")
    public ResultVo update(@Valid @RequestBody Reader reader) {
        readerDao.updateEntity(reader);
        return ResultVo.ok();
    }

    /**
     * 删除指定ID的读者。
     *
     * @param id 读者ID，不能小于0
     * @return 操作结果的ResultVo
     */
    @DeleteMapping("/{id}")
    public ResultVo delete(@PathVariable @Min(value = 0, message = "不能小于0") long id) {
        readerDao.deleteEntityById(id);
        return ResultVo.ok();
    }

    /**
     * 获取所有读者列表。
     *
     * @return 包含读者列表的ResultVo
     */
    @GetMapping("/")
    public ResultVo list() {
        return ResultVo.ok(readerDao.getAllEntities());
    }
}    